﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Text;
using System.Drawing;
using System.Drawing.Imaging;

using GreatB2C.Utility;

namespace GreatB2C.Web.Controls
{
    public partial class ValidCode : System.Web.UI.Page
    {
        protected void Page_Load( object sender , EventArgs e )
        {
            DrawImage( 5 );
        }

        /// <summary>
        /// 随机码认证
        /// </summary>
        /// <param name="code">生成认证长度</param>
        protected void DrawImage( int code )
        {
            Session[ "CheckCode" ] = Rand.Number( code );
            CreateImages( Session[ "CheckCode" ].ToString( ) );
        }
        /// <summary>
        /// /// 生成验证图片
        /// /// </summary>
        /// /// <param name="checkCode">验证字符</param>
        protected void CreateImages( string checkCode )
        {
            int iwidth = ( int )( checkCode.Length * 15 );
            System.Drawing.Bitmap image = new System.Drawing.Bitmap( iwidth , 30 );
            Graphics g = Graphics.FromImage( image );
            g.Clear( Color.LightCyan );
            //定义颜色
            Color[] c = { Color.Black , Color.Red , Color.DarkBlue , Color.Green , Color.Orange , Color.Brown , Color.DarkCyan , Color.Purple , Color.SkyBlue };
            //定义字体 
            string[] font = { "Verdana" , "Microsoft Sans Serif" , "Comic Sans MS" , "Arial" , "宋体" , "Comic Sans MS" };
            Random rand = new Random( );
            //随机输出噪点
            for ( int i = 0 ; i < 150 ; i++ )
            {
                int x = rand.Next( image.Width );
                int y = rand.Next( image.Height );
                g.DrawPie( new Pen( Color.LightGray , 0 ) , x , y , 6 , 6 , 1 , 1 );
            }

            //输出不同字体和颜色的验证码字符
            for ( int i = 0 ; i < checkCode.Length ; i++ )
            {
                int cindex = rand.Next( 7 );
                int findex = rand.Next( 6 );
                Font _font = new System.Drawing.Font( font[ findex ] , 14 , System.Drawing.FontStyle.Bold );
                Brush b = new System.Drawing.SolidBrush( c[ cindex ] );
                int ii = 4;
                if ( ( i + 1 ) % 2 == 0 )
                {
                    ii = 2;
                }
                g.DrawString( checkCode.Substring( i , 1 ) , _font , b , 3 + ( i * 12 ) , ii );
            }

            //画一个边框
            g.DrawRectangle( new Pen( Color.Red , 0 ) , 100 , 0 , image.Width - 1 , image.Height - 1 );
            //输出到浏览器
            System.IO.MemoryStream ms = new System.IO.MemoryStream( );
            image.Save( ms , System.Drawing.Imaging.ImageFormat.Jpeg );
            Response.ClearContent( );//Response.ClearContent();
            Response.ContentType = "image/Jpeg";
            Response.BinaryWrite( ms.ToArray( ) );
            g.Dispose( );
            image.Dispose( );
        }
    }
}
